package fr.afcepf.al22.qualite.test;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import fr.afcepf.al22.qualite.data.DaoPersonneImpl;
import fr.afcepf.al22.qualite.data.IDaoPersonne;
import fr.afcepf.al22.qualite.entitee.Personne;

/**
 * Classe de tests pour le DAO Personne.
 * @author Stagiaire
 *
 */
public class SansMockTestDaoPersonne {
    /**
     *  dao de type IDaoPersonne.
     */
    private IDaoPersonne dao;
    /**
     * persNominale de type Personne.
     */
    private Personne persNominale;
    /**
     * sdf SimpleDateFormat.
     */
    private SimpleDateFormat sdf =
            new SimpleDateFormat("dd/MM/yyyy");
    /**
     * @Before
     */
    @Before
    public void setUp() {
        // regeneration de la bdd
        // execution d'un script
        try {
            String path = Thread.currentThread()
                    .getContextClassLoader()
                    .getResource("base.bat").getPath();
            Process proc =
                    Runtime.getRuntime().exec(path);
            proc.waitFor();
        } catch (IOException | InterruptedException e1) {
            e1.printStackTrace();
        }
        // initialisation pour les tests.
        String naissance = "12/12/2012";
        try {
            persNominale =
                    new Personne(null, "toto",
                    "paramMail", "paramMdp",
                    sdf.parse(naissance));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //sans mock
        dao = new DaoPersonneImpl();
    }
    /**
     *@Test.
     */
    @Test
    public void testAjoutNominal() {
        Personne retour = dao.ajouter(persNominale);
        Assert.assertNotNull(retour);
        Assert.assertNotNull(retour.getId());
        Assert.assertEquals(3, retour.getId().intValue());
        Assert.assertNotNull(retour.getNom());
        Assert.assertEquals("toto", retour.getNom());
        Assert.assertNotNull(retour.getMail());
        Assert.assertEquals("paramMail", retour.getMail());
        Assert.assertNotNull(retour.getMdp());
        Assert.assertEquals("paramMdp", retour.getMdp());
        Assert.assertNotNull(retour.getNaissance());
        try {
            Assert.assertEquals(sdf.parse("12/12/2012"),
                    retour.getNaissance());
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void testAjoutNomNull() {
        persNominale.setNom(null);
        Personne retour = dao.ajouter(persNominale);
        Assert.assertNotNull(retour);
        Assert.assertNull(retour.getId());
    }
    @Test
    public void testAjoutNomTrop() {
        for (int i = 0; i < 10; i++) {
            persNominale.setNom(
                persNominale.getNom()
                + persNominale.getNom());
        }
        Personne retour = dao.ajouter(persNominale);
        Assert.assertNotNull(retour);
        Assert.assertNull(retour.getId());
    }
}
